package com.doctcloud.hisinfo.common.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doctcloud.hisinfo.histable.domain.comm.DeptOiAttrDictDo;
import com.doctcloud.hisinfo.histable.domain.comm.DrugBasicInfoDo;
import com.doctcloud.hisinfo.histable.domain.comm.DrugFormDictDo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 药品基础信息 Mapper 接口
 *
 * @author samula
 * @since 2025-09-23
 */
@Mapper // 标记为MyBatis的Mapper接口
public interface DrugBasicInfoDoMapper extends BaseMapper<DrugBasicInfoDo> {
    /**
     * 插入一条完整记录
     * @param record 待插入的实体
     * @return 影响行数
     */
    int insert(DrugBasicInfoDo record);
    /**
     * 根据主键删除记录
     * @param drugStdCode 主键 drugStdCode
     * @return 影响行数
     */
    int deleteByPrimaryKey(String drugStdCode);
    /**
     * 根据主键更新记录的所有字段
     * @param record 包含更新信息的实体
     * @return 影响行数
     */
    int updateByPrimaryKey(DrugBasicInfoDo record);
    /**
     * 根据主键查询记录
     * @param drugStdCode 主键 drugStdCode
     * @return 查询到的实体
     */
    DrugBasicInfoDo selectByPrimaryKey(String drugStdCode);
    /**
     * 查询所有记录
     * @return 实体列表
     */
    List<DrugFormDictDo> selectAll();
    /**
     * 根据主键ID集合批量查询
     *
     * @param drugStdCodes 药品唯一码集合
     * @return 药品基础信息列表
     */
    List<DrugBasicInfoDo> selectBatchByDrugStdCodes(@Param("drugStdCodes") List<String> drugStdCodes);

    /**
     * 根据厂家ID查询
     *
     * @param firmId 厂家ID
     * @return 药品基础信息列表
     */
    List<DrugBasicInfoDo> selectByFirmId(@Param("firmId") String firmId);

    /**
     * 根据多个条件联合查询（示例）
     *
     * @param drugName 药品名称
     * @param drugSpec 药品规格
     * @param firmId   厂家ID
     * @return 药品基础信息列表
     */
    List<DrugBasicInfoDo> selectByMultiConditions(
            @Param("drugName") String drugName,
            @Param("drugSpec") String drugSpec,
            @Param("firmId") String firmId);
}